package com.itheima.多态.test01;

public class Test06 {
    /*
    定义动物类 属性:年龄行为:喝水,吃东西【吃什么不确定】
    定义游泳接口: 行为:游泳方法
    定义狗类 行为:吃饭(啃骨头)和 游泳(狗刨)
    定义羊类: 行为:吃饭(羊啃草)
    定义青蛙类: 行为:吃饭(吃虫子)和 游泳(蛙泳)
    定义饲养员类: 行为:饲养动物:包括吃饭和喝水
    定义测试类: 创建饲养员对象,饲养员调用三次饲养方法:饲养狗,饲养羊,饲养青蛙
    要求:
    1. 子类重写父类中的吃东西方法
    2. 要求给狗和青蛙添加游泳的方法(实现游泳接口)
    3. 饲养员类中定义一个方法,传入动物类对象(父类),
    4. 调用吃饭方法,如果有游泳方法也需进行测试
    运行结果：
    喝水
    狗啃骨头
    狗会狗刨游泳
    喝水
    青蛙吃小虫
    青蛙会蛙泳
    喝水
    羊啃草
     */
    public static void main(String[] args) {
        Breeder breeder = new Breeder();
        breeder.useAnimal(new Dog1(), "骨头");
        breeder.useAnimal(new Frog(), "小虫");
        breeder.useAnimal(new Sheep(), "草");
    }
}

abstract class Animal2 {
    private int age;

    public void drink() {
        System.out.println("喝水");
    }

    public void eat(String something) {
    }
}

class Breeder {
    public void useAnimal(Animal2 a, String something) {
        a.drink();
        a.eat(something);
        //规避风险: 通过instanceof关键字解决
        if (a instanceof Dog1) {
            Dog1 dog1 = (Dog1) a;
            dog1.swimming("狗刨");
        }
        if (a instanceof Frog) {
            Frog frog = (Frog) a;
            frog.swimming("蛙泳");
        }
    }
}

class Dog1 extends Animal2 implements Swim { //狗子类
    public void eat(String something) {
        System.out.println("狗啃" + something);
    } //狗子吃东西

    public void swimming(String something1) {
        System.out.println("狗会" + something1 + "游泳");
    } //狗子游泳
}

class Frog extends Animal2 implements Swim { //青蛙类
    public void eat(String something) {
        System.out.println("青蛙吃" + something);
    }

    public void swimming(String something1) {
        System.out.println("青蛙会" + something1);
    }
}

class Sheep extends Animal2 { //羊类
    public void eat(String something) {
        System.out.println("羊啃" + something);
    }
}

interface Swim { //游泳接口
    void swimming(String something1);
}